package com.size.mall.manager.pms_base.controller;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import com.alibaba.dubbo.config.annotation.Reference;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.size.mall.mallapi.entity.PmsBaseAttrInfo;
import com.size.mall.mallapi.entity.PmsBaseAttrValue;
import com.size.mall.mallapi.service.PmsBaseAttrInfoService;
import com.size.mall.mallapi.service.PmsBaseAttrValueService;
import lombok.experimental.var;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.yin.tools.config.MultiRequestBody;

import java.util.List;
import java.util.Map;

@RestController
@CrossOrigin

public class AttrInfoController {
    @Reference
    PmsBaseAttrInfoService pmsBaseAttrInfoService;

    @Reference
    PmsBaseAttrValueService pmsBaseAttrValueService;

    @GetMapping("/attrInfoList")
    public List<PmsBaseAttrInfo> getAttrInfoList(String catalog3Id) {


        Wrapper<PmsBaseAttrInfo> qw = new QueryWrapper<>();
        ((QueryWrapper<PmsBaseAttrInfo>) qw).eq("catalog3_id", catalog3Id);
        List<PmsBaseAttrInfo> pmsBaseAttrInfos = pmsBaseAttrInfoService.list(qw);
        for (PmsBaseAttrInfo pmsBaseAttrInfo : pmsBaseAttrInfos) {

            List<PmsBaseAttrValue> pmsBaseAttrValues = CollUtil.newArrayList();


            Map<String, Object> attr_id1 = MapUtil.of("attr_id", pmsBaseAttrInfo.getId());


            pmsBaseAttrValues = (List<PmsBaseAttrValue>) pmsBaseAttrValueService.listByMap(attr_id1);

            // value 依赖外键"attr_id
            pmsBaseAttrInfo.setAttrValueList(pmsBaseAttrValues);


        }

        return pmsBaseAttrInfos;
    }


    @RequestMapping(value = "/saveAttrInfo", method = RequestMethod.OPTIONS)
    @Transactional
    public String saveAttrInfo(@RequestBody PmsBaseAttrInfo attrInfo) {

        System.out.println(attrInfo);

        boolean isSave = pmsBaseAttrInfoService.save(attrInfo);
        // 如果失败直接返回
        if (!isSave) {
            return "Fired";
        }

        // 成功的话取出attr_id
        Wrapper<PmsBaseAttrInfo> wq = new QueryWrapper<>();
        ((QueryWrapper<PmsBaseAttrInfo>) wq).eq("attr_name", attrInfo.getAttrName());
        PmsBaseAttrInfo one = pmsBaseAttrInfoService.getOne(wq);
        String attr_id = one.getId();

        List<PmsBaseAttrValue> attrValueList = attrInfo.getAttrValueList();
        for (var value : attrValueList) {

            value.setAttrId(attr_id);
            pmsBaseAttrValueService.save(value);
        }


        return "success";
    }

    @PostMapping(value = "/saveAttrInfo")
    @Transactional
    public String saveAttrInfo2(
            @MultiRequestBody("id") String id, @MultiRequestBody("attrName") String attrName,
            @MultiRequestBody(value = "attrValueList") PmsBaseAttrInfo pmsBaseAttrInfo

                               ) {

        PmsBaseAttrInfo info = new PmsBaseAttrInfo().setId(id).setAttrName(attrName);

        pmsBaseAttrInfoService.saveOrUpdate(info);

        List<PmsBaseAttrValue> attrValueList = pmsBaseAttrInfo.getAttrValueList();

        pmsBaseAttrValueService.saveOrUpdateBatch(attrValueList);

        return "success";

    }


    // getAttrValueList?attrId=50
    @PostMapping("getAttrValueList")
    public PmsBaseAttrInfo getAttrValueList(String attrId) {

        PmsBaseAttrInfo info = pmsBaseAttrInfoService.getById(attrId);


        if (null != info) {

            Wrapper<PmsBaseAttrValue> wp = new QueryWrapper<>();
            ((QueryWrapper<PmsBaseAttrValue>) wp).eq("attr_id", attrId);
            info.setAttrValueList(pmsBaseAttrValueService.list(wp));

        }


        return info;


    }
}
